package cripto.gui;

import java.awt.Button;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import cripto.core.*;
import java.awt.List;
public class Vigenere extends JFrame {

	private JPanel contentPane;
	private JLabel lblNewLabel;
	private static JTextArea log,log2;
	/**************************************************************/
	char [][]matriz=new char [27][27];
	/*************   criptograma  ********************/
	String criptograma=null;
	String mensaje,clave;
	/****************************************************************/
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Vigenere frame = new Vigenere();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Vigenere() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 700, 600);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		setTitle("Vigenere");
		contentPane.setLayout(null);

		lblNewLabel = new JLabel(" Mensaje :");
		lblNewLabel.setBounds(5, 5, 108, 41);
		lblNewLabel.setLabelFor(this);
		lblNewLabel.setForeground(new Color(0, 0, 0));
		lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 11));
		contentPane.add(lblNewLabel);

		log = new JTextArea();
		log.setBounds(119, 5, 380, 160);
		log.setEditable(true);
		log.setEnabled(true);
		contentPane.add(log);

		log2 = new JTextArea();
		log2.setBounds(119, 195, 380, 160);
		log.setEditable(true);
		log.setEnabled(true);
		contentPane.add(log2);

		Button button = new Button("Cifrar");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				cifra(mensaje,clave );

			}
		});
		button.setBounds(130, 393, 70, 22);
		contentPane.add(button);

		Button button_1 = new Button("Descifrar");
		button_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
			}
		});
		button_1.setActionCommand("Descifrar");
		button_1.setBounds(264, 393, 70, 22);
		contentPane.add(button_1);

	}
	
	/**********************************************************************************************************/
	public String cifra(String mensaje,String clave)
	{
		criptograma=" ";
		//Quitamos espacios en blanco de la clave y del mensaje
		mensaje=quitaEspacios(mensaje);
		clave=quitaEspacios(clave);

		//Convertimos a mayusculas el mensaje y la clave
		mensaje=mensaje.toUpperCase();
		clave=clave.toUpperCase();

		//Completamos el tamano de la clave al tamano del mensaje
		clave=completa(clave,mensaje.length());

		//aplicamos el algoritmo de Vigenere
		for(int i=0;i<mensaje.length();i++)
		{
			//Obtenemos el caracter segun la matriz de vigenere
			//que es la interseccion de la columna del mensaje y la columna
			//de las claves y la concatenamos con el criptograma
			criptograma+=getCaracter(mensaje.charAt(i),clave.charAt(i));
		}


		return criptograma;
	}//fin del metodo cifra
	private String quitaEspacios(String problema) {
		char []auxiliar=problema.toCharArray();
		problema="";
		for(int i=0;i<auxiliar.length;i++)
		{
			if(auxiliar[i]!=' ')
			{
				problema+=auxiliar[i];

			}
		}
		return problema;
	}

	private String completa(String faltante,int tamano) {
		int diferencia=0,indice=0;
		if(faltante.length()!=tamano)
		{
			//preguntamos si es menor la clave al mensaje
			if(faltante.length()<tamano)
			{
				//Tenemos que acompletar
				//obtenemos la diferencia 
				diferencia=tamano-faltante.length();
				while(diferencia!=0)
				{
					faltante+=faltante.charAt(indice);
					//preguntamos si es el final de la cadena
					if(indice==(faltante.length()-1))
					{
						indice=-1;
					}
					indice++;
					diferencia--;
				}
			}
			else
			{
				//Tenemos que acortar
				//obtenemos lo que nos sobra
				diferencia=faltante.length()-tamano;
				//cortamos la cadena
				faltante=faltante.substring(0, faltante.length()-diferencia);
			}
		}
		return faltante;
	}

	/**************************************************************************************************************/

	private String getCaracter(char charAt, char charAt2) {
		// TODO Auto-generated method stub
		return null;
	}
	public static void escribirEnLog(String cadena)
	{

		log.append(cadena);
		log.selectAll();
	}

}
